home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 98 / Skunkware 98.iso / src / net / bind-contrib.tar.gz / bind-contrib.tar / contrib / host / nslookup < prev    next >
Text File  |  1996-10-25  |  5KB  |  281 lines

  1. #!/bin/sh -
  2. #
  3. #    @(#)nslookup            e07@nikhef.nl (Eric Wassenaar) 940919
  4. #
  5. # Author:    E.Wassenaar, Nikhef-H
  6. # Version:    19-SEP-1994
  7. # Revision:
  8. #
  9. # This utility emulates nslookup as a wrapper to host.
  10. # It performs most, but not all, functions.
  11.  
  12. exec=echo
  13. exec=
  14.  
  15. # ----------------------------------------------------------------------
  16. # Setup environment.
  17. # ----------------------------------------------------------------------
  18.  
  19. # This is where the ``host'' executable lives.
  20. BINDIR=/usr/local/bin
  21.  
  22. PATH=${BINDIR}:/bin:/usr/bin:/usr/ucb ; export PATH
  23.  
  24. cmd=`basename $0`
  25.  
  26. options="[-l]"
  27. usage="Usage: $cmd $options [server]"
  28.  
  29. # ----------------------------------------------------------------------
  30. # Exit codes from <sysexits.h>
  31. # ----------------------------------------------------------------------
  32.  
  33. EX_OK=0
  34. EX_USAGE=64
  35. EX_UNAVAILABLE=69
  36.  
  37. # ----------------------------------------------------------------------
  38. # Setup defaults.
  39. # ----------------------------------------------------------------------
  40.  
  41. name=""
  42. zone=""
  43.  
  44. type=""
  45. class=""
  46.  
  47. server=""
  48.  
  49. debug=""
  50. verbose=""
  51. norecurse=""
  52. vc=""
  53.  
  54. # ----------------------------------------------------------------------
  55. # Process arguments.
  56. # ----------------------------------------------------------------------
  57.  
  58. for i
  59. do
  60.     if [ "X$server" != "X" ]
  61.     then
  62.         echo "$usage" 1>&2 ; exit $EX_USAGE
  63.     fi
  64.  
  65.     case "$i" in
  66.     -d)    exec=echo        ;;
  67.     -l)    server=`hostname`    ;;
  68.     -*)    echo "$cmd: Unknown option $i" 1>&2 ; exit $EX_USAGE ;;
  69.     *)    server="$i"        ;;
  70.     esac
  71. done
  72.  
  73. # ----------------------------------------------------------------------
  74. # Choose between BSD or SYSV echo command.
  75. # ----------------------------------------------------------------------
  76.  
  77. n=`echo -n`
  78. if [ "$n" = "-n" ]
  79. then
  80.     c='\c' ; n=''
  81. else
  82.     n='-n' ; c=''
  83. fi
  84.  
  85. # ----------------------------------------------------------------------
  86. # Main loop.
  87. # ----------------------------------------------------------------------
  88.  
  89. trap continue 2
  90.  
  91. while echo $n "> $c" ; read line
  92. do
  93.     case "$line" in
  94.     "")    continue    ;;
  95.     *\**)    continue    ;;
  96.     *\!*)    continue    ;;
  97.     *\?*)    line="help"    ;;
  98.     esac
  99.  
  100.     set - $line
  101.     command="$1"
  102.     case "$command" in
  103.  
  104.     help)
  105.         cat <<!
  106.     exit | quit    - exit from the program
  107.     help | ?    - print this help message
  108.     set  | set all    - show all current settings
  109.     set [no]debug    - increase debug output level
  110.     set [no]verbose    - increase verbose output level
  111.     set [no]recurse    - request recursive nameserver queries
  112.     set [no]vc    - use virtual circuit for queries
  113.     set type=TYPE    - query about the given resource record TYPE
  114.     set class=CLASS    - query about the given resource record CLASS
  115.     server SERVER    - contact the explicit server with name SERVER
  116.     server        - show the name of the current explicit SERVER
  117.     NAME        - query for NAME using all current settings
  118.     NAME SERVER    - query for NAME at the given SERVER
  119.     ls ZONE        - generate listing of the given name ZONE
  120.     ls        - generate listing of the last given ZONE
  121.     ls ZONE [>]FILE    - copy resource record output also to FILE
  122. !
  123.         ;;
  124.  
  125.     exit|quit)
  126.         break
  127.         ;;
  128.  
  129.     set)
  130.         option="$2"
  131.         case "$option" in
  132.  
  133.         ""|all)
  134.             echo "name=$name"
  135.             echo "zone=$zone"
  136.             echo "server=$server"
  137.             echo "set type=$type"
  138.             echo "set class=$class"
  139.             echo "set debug=$debug"
  140.             echo "set verbose=$verbose"
  141.             echo "set norecurse=$norecurse"
  142.             echo "set vc=$vc"
  143.             ;;
  144.  
  145.         debug|debu|deb|de|d)
  146.             debug="-d $debug"
  147.             ;;
  148.  
  149.         nodebug|nodebu|nodeb|node|nod)
  150.             debug=""
  151.             ;;
  152.  
  153.         d2)
  154.             debug="-d -d"
  155.             verbose="-v -v"
  156.             ;;
  157.  
  158.         nod2)
  159.             debug=""
  160.             verbose=""
  161.             ;;
  162.  
  163.         verbose|verbos|verbo|verb|ver|ve|v)
  164.             verbose="-v $verbose"
  165.             ;;
  166.  
  167.         noverbose|noverbos|noverbo|noverb|nover|nove|nov)
  168.             verbose=""
  169.             ;;
  170.  
  171.         recurse|recurs|recur|recu|rec|re|r)
  172.             norecurse=""
  173.             ;;
  174.  
  175.         norecurse|norecurs|norecur|norecu|norec|nore|nor)
  176.             norecurse="-r"
  177.             ;;
  178.  
  179.         vc)
  180.             vc="-u"
  181.             ;;
  182.  
  183.         novc)
  184.             vc=""
  185.             ;;
  186.  
  187.         querytype=*|querytyp=*|queryty=*|queryt=*|\
  188.         query=*|quer=*|que=*|qu=*|q=*|\
  189.         type=*|typ=*|ty=*|t=*)
  190.             type=`echo $option | sed 's/.*=//'`
  191.             if [ "X$type" != "X" ]
  192.             then
  193.                 type="-t $type"
  194.             fi
  195.             ;;
  196.  
  197.         querytype|querytyp|queryty|queryt|\
  198.         query|quer|que|qu|q|\
  199.         type|typ|ty|t)
  200.             type=""
  201.             ;;
  202.  
  203.         class=*|clas=*|cla=*|cl=*|c=*)
  204.             class=`echo $option | sed 's/.*=//'`
  205.             if [ "X$class" != "X" ]
  206.             then
  207.                 class="-c $class"
  208.             fi
  209.             ;;
  210.  
  211.         class*|clas*|cla*|cl*|c*)
  212.             class=""
  213.             ;;
  214.  
  215.         *)
  216.             echo "Unknown option $option"
  217.             ;;
  218.  
  219.         esac
  220.         ;;
  221.  
  222.     server)
  223.         nserver="$2"
  224.         if [ "X$nserver" = "X" ]
  225.         then
  226.             if [ "X$server" = "X" ]
  227.             then
  228.                 echo "No server defined"
  229.             else
  230.                 echo "server=$server"
  231.             fi
  232.         else
  233.             server="$nserver"
  234.         fi
  235.         ;;
  236.  
  237.     ls)
  238.         nzone="$2"
  239.         if [ "X$nzone" = "X" ]
  240.         then
  241.             if [ "X$zone" = "X" ]
  242.             then
  243.                 echo "No zone defined"
  244.                 continue
  245.             fi
  246.         else
  247.             zone="$nzone"
  248.         fi
  249.  
  250.         file=`echo "$3$4" | sed 's/>*//'`
  251.         if [ "X$file" != "X" ]
  252.         then
  253.             file="-f $file"
  254.         fi
  255.  
  256.         options="$debug $verbose $norecurse $vc $file"
  257.         $exec host $options $type $class -l $zone $nserver
  258.         ;;
  259.  
  260.     [a-zA-Z0-9]*)
  261.         name="$1"
  262.  
  263.         nserver="$2"
  264.         if [ "X$nserver" = "X" ]
  265.         then
  266.             nserver="$server"
  267.         fi
  268.  
  269.         options="$debug $verbose $norecurse $vc"
  270.         $exec host $options $type $class $name $nserver
  271.         ;;
  272.  
  273.     *)
  274.         echo "Unknown command $command"
  275.         ;;
  276.  
  277.     esac
  278. done
  279.  
  280. exit $EX_OK
  281.